/**
 * 文件上传、缩略图、放大预览
 * 
 * 调用方法：

    require([
        'module/fileUploadAndViewZoom/init'
    ], function (fileUploadAndViewZoom) {
        new fileUploadAndViewZoom({el: '#fileupload'}, {
            upload: {
                // 上传文件时访问的 url 地址
                    // 上传成功需返回数据对象
                        // {status: 1, data: {id: 1, name: '测试图片', url: '', mime: 'image/jpeg'}}
                    // 上传失败需返回数据对象
                        // {status: 1, info: '错误提示'}
                url: '',
                // 需额外传递的参数
                param: {
                    article_id: 1,
                }
            },
            delete: {
                // 删除文件时访问的 url 地址
                url: '',
                // 需额外传递的参数（自带参数 id = 对应的图片ID）
                param: {
                    article_id: 1,
                }
            },
            default: [
                {id: 1, name: '测试图片', url: '', mime: 'image/jpeg'},
                {id: 1, name: '测试文件', url: '', mime: 'application/zip'}
            ]
        });
    });

 */
define([
    'underscore',
    'jquery',
    'backbone',
    'Mustache',
    'text!./init.html',
    './boxView',
        'less!./init.less',
        'jquery.fileupload'
], function (_, $, Backbone, Mustache, initTpl, boxView) {
    'use strict';

    var View = Backbone.View.extend({

        // 事件绑定
        events: {},

        // 初始化
        initialize: function (init, options) {
            var thisView = this;

            thisView.options = options;
            thisView.render();
        },

        // 渲染
        render: function () {
            var thisView = this;

            // 渲染模板
            var html = Mustache.render(initTpl);
            thisView.$el.html(html);

            // 初始化上传插件
            thisView.initFileupload();
            
            // 填充默认值
            thisView.addAll();
        },

        // 初始化上传插件
        initFileupload: function () {
            var thisView = this;

            var url = thisView.options.upload.url
                +'?'+$.param(thisView.options.upload.param);

            thisView.$el.find('.box:last a')
                .on('click', function (e) {
                    e.preventDefault();
                    $(this).next().click();
                })
            .next()
                .fileupload({
                    url: url,
                    done: function (e, data) {
                        var status = data.result.status,
                            info   = data.result.info,
                            file   = data.result.data;

                        if (status) {
                            thisView.addOne(file);
                        }
                        else {
                            alert(info);
                        }
                    }
                });
        },

        // 增加一个文件
        addOne: function (model) {
            var thisView = this;

            var view = new boxView({model: model});
            
            // 参数传递
            view.options = thisView.options;

            thisView.$el.find('.box:last').before(view.render().el);
        },

        // 增加全部文件
        addAll: function () {
            var thisView = this;
            
            _.each(thisView.options.default, thisView.addOne, thisView);
        }

    });

    return View;
});